package astar 
{
	/**
	 * AStar 算法的网格类
	 * @author StefanieKaka
	 */
	public class Grid 
	{
		/// 构造函数
		public function Grid(cols : int, rows : int) 
		{
			m_cols = cols;
			m_rows = rows;
			m_nodes = new Vector.<Vector.<Node>>();
			
			for (var i : int = 0; i < m_cols; ++i)
			{
				m_nodes[i] = new Vector.<Node>();
				for (var j : int = 0; j < m_rows; ++j)
				{
					m_nodes[i].push(new Node(i, j));
				}
			}
		}
		
///////////////////////////////////////////////////////////////////////////////////////////////////
// 公共域
///////////////////////////////////////////////////////////////////////////////////////////////////
		
		/**
		 * 起始节点
		 */
		public function get startNode() : Node
		{
			return m_startNode;
		}
		
		/**
		 * 结束节点
		 */
		public function get endNode() : Node
		{
			return m_endNode;
		}
		
		/**
		 * 总列数
		 */
		public function get cols() : int
		{
			return m_cols;
		}
		
		/**
		 * 总行数
		 */
		public function get rows() : int
		{
			return m_rows;
		}
		
		/**
		 * 获得节点
		 */
		public function getNode(x : int, y : int) : Node
		{
			return m_nodes[x][y];
		}
		
		/**
		 * 设置结束节点位置
		 */
		public function setEndNode(x : int, y : int) : void
		{
			m_endNode = m_nodes[x][y];
		}
		
		/**
		 * 设置起始节点位置
		 */
		public function setStartNode(x : int, y : int) : void
		{
			m_startNode = m_nodes[x][y];
		}
		
		/**
		 * 设置节点是否可通过
		 */
		public function setWalkable(x : int, y : int, value : Boolean) : void
		{
			m_nodes[x][y].walkable = value;
		}

///////////////////////////////////////////////////////////////////////////////////////////////////
// 私有域
///////////////////////////////////////////////////////////////////////////////////////////////////

		private var m_startNode : Node = null;
		private var m_endNode : Node = null;
		private var m_nodes : Vector.<Vector.<Node>> = null;
		private var m_cols : int = 0;
		private var m_rows : int = 0;
		
	}

}